package Perfil;

import Trab.ES1.Modelos.Categoria;
import Trab.ES1.Modelos.Ingrediente;
import Trab.ES1.Modelos.Receita;
import Trab.ES1.Utilidades.Fachada;
import java.util.List;
import java.util.Scanner;

/**
 *
 * @author Grupo H
 */
public class PerfilReceita extends Perfil
{
    private Receita receita;
    private Fachada fachada;
    public PerfilReceita(Receita r, boolean eDono)
    {
        super(r.getNome(), eDono);
        this.receita = r;
        fachada = Fachada.getInstancia();
    }
    
    public Receita getReceita()
    {
        return this.receita;
    }
    
    @Override
    public void exibeCabecalho() 
    {
        System.out.println("----------------------------------------------------------------------------------------------------------------------");
        System.out.println("Autor: "+this.getReceita().getAutor().getNomePublico()+"\nTempo de preparo = "+this.getReceita().getTempoPreparo());
        System.out.println(this.getReceita().getNomesIngredientes()+"\nCategorias: "+this.receita.getNomesCategorias());
        System.out.println("\nNota = "+this.getReceita().getNota()+"\nDificuldade = "+this.getReceita().getDificuldade());
        System.out.println("Descrição: " + this.receita.getDescricao());
        System.out.println("----------------------------------------------------------------------------------------------------------------------");
    }
    @Override
    public void exibeOpcoes()
    {
        Scanner in = new Scanner(System.in);
        int resp = 0;
        if(eDono)
        {
            do
            {
                System.out.println("1-Editar o nome da receita\n2-Editar a descrição da receita\n"
                            + "3-Editar o tempo de preparo\n4-Editar ingredientes\n5-Editar categorias\n6-Deletar receita\n7-Para sair");
                resp = in.nextInt();
                in.nextLine();
                switch(resp)
                {
                    case 1:
                        editaNomeReceita(receita);
                        break;
                    case 2:
                        editaDescricaoReceita(receita);
                        break;
                    case 3:
                        editaTempoPreparoReceita(receita);
                        break;
                    case 4:
                        editaIngredientes(receita);
                        break;
                    case 5:
                        editaCategorias(receita);
                        break;
                    case 6:
                        deletaReceita(receita);
                        break;
                    case 7:
                        break;
                    default:
                        System.out.println("Opção inválida.");
                        break;
                }
            }while(resp != 6 && resp != 7); 
        }
        else
        {
            do
            {
                System.out.println("1-Avaliar Receita\n2-Favoritar Receita\n3-Para sair");
                resp = in.nextInt();
                in.nextLine();
                switch(resp)
                {
                    case 1:
                        avaliaReceita();
                        break;
                    case 2:
                        favoritaReceita();
                        break;
                    case 3:
                        break;
                    default:
                        System.out.println("Opção inválida.");
                }
            }while(resp != 3);
        }
    }
    private void editaNomeReceita(Receita r)
    {
        Scanner in = new Scanner(System.in);
        String novoNome = "";
        do
        {
            System.out.println("Qual nome deseja inserir?");
            novoNome = in.nextLine();
            if(novoNome.equalsIgnoreCase(""))
                System.out.println("-- Nome deve ser não vazio --");
        }while(novoNome.equalsIgnoreCase(""));
        r.setNome(novoNome);
    }
    private void editaDescricaoReceita(Receita r)
    {
        Scanner in = new Scanner(System.in);
        String novaDescricao = "";
        do
        {
            System.out.println("Qual descrição deseja inserir?");
            novaDescricao = in.nextLine();
            if(novaDescricao.equalsIgnoreCase(""))
                System.out.println("-- Descrição deve ser não vazia --");
        }while(novaDescricao.equalsIgnoreCase(""));
        r.setDescricao(novaDescricao);
    }
    private void editaTempoPreparoReceita(Receita r)
    {
        Scanner in = new Scanner(System.in);
        int tempoPreparo = 0;
        do
        {
            System.out.println("Qual o tempo de preparo deseja inserir?(Em minutos)");
            tempoPreparo = in.nextInt();
            in.nextLine();
            if(tempoPreparo <= 0)
                System.out.println("-- Tempo de preparo deve ser maior que zero --");
        }while(tempoPreparo <= 0);
        r.setTempoPreparo(tempoPreparo);
    }
    private void editaIngredientes(Receita r)
    {
        Scanner in = new Scanner(System.in);
        List<Ingrediente> ingredientes = r.getIngredientes();
        for (Ingrediente ingrediente : ingredientes) 
        {
            System.out.println(ingrediente.getNome());
        }
        int resp = 0;
        do
        {
            System.out.println("1-Inserir ingrediente\n2-Remover ingrediente\n3- Para sair");
            resp = in.nextInt();
            in.nextLine();
            switch(resp)
            {
                case 1:
                    insereIngrediente(r);
                    break;
                case 2:
                    removeIngrediente(r);
                    break;
            }
        }while(resp != 3);
        
    }
    private void insereIngrediente(Receita r)
    {
        Scanner in = new Scanner(System.in);
        String nomeIngrediente = "";
        do
        {
            System.out.println("Digite o nome do ingrediente a ser inserido: ");
            nomeIngrediente = in.nextLine();
            if(nomeIngrediente.equalsIgnoreCase(""))
                System.out.println("Nome do ingrediente deve ser não vazio.");
        }while(nomeIngrediente.equalsIgnoreCase(""));
        Ingrediente i = fachada.criaIngrediente(nomeIngrediente);
        if(!r.getIngredientes().contains(i))
            r.getIngredientes().add(i);
    }
    private void removeIngrediente(Receita r)
    {
        Scanner in = new Scanner(System.in);
        String nomeIngrediente = "";
        do
        {
            System.out.println("Digite o nome do ingrediente a ser removido: ");
            nomeIngrediente = in.nextLine();
            if(nomeIngrediente.equalsIgnoreCase(""))
                System.out.println("-- Nome do ingrediente deve ser não vazio. --");
        }while(nomeIngrediente.equalsIgnoreCase(""));
        Ingrediente i = fachada.buscaIngrediente(nomeIngrediente);
        if(r.getIngredientes().contains(i))
            r.getIngredientes().remove(i);
    }
    private void editaCategorias(Receita r)
    {
        Scanner in = new Scanner(System.in);
        List<Categoria> categorias = r.getCategorias();
        for (Categoria categoria : categorias) 
        {
            System.out.println(categoria.getNome());
        }
        int resp = 0;
        do
        {
            System.out.println("1-Inserir categoria\n2-Remover categoria\n3- Para sair");
            resp = in.nextInt();
            in.nextLine();
            switch(resp)
            {
                case 1:
                    insereCategoria(r);
                    break;
                case 2:
                    removeCategoria(r);
                    break;
            }
        }while(resp != 3);
    }
    private void insereCategoria(Receita r)
    {
        Scanner in = new Scanner(System.in);
        String nomeCategoria = "";
        do
        {
            System.out.println("Digite o nome da categoria a ser inserida: ");
            nomeCategoria = in.nextLine();
            if(nomeCategoria.equalsIgnoreCase(""))
                System.out.println("Nome da categoria deve ser não vazio.");
        }while(nomeCategoria.equalsIgnoreCase(""));
        Categoria c = fachada.criaCategoria(nomeCategoria);
        if(!r.getCategorias().contains(c))
            r.getCategorias().add(c);
    }
    private void removeCategoria(Receita r)
    {
        Scanner in = new Scanner(System.in);
        String nomeCategoria = "";
        do
        {
            System.out.println("Digite o nome da categoria a ser removida: ");
            nomeCategoria = in.nextLine();
            if(nomeCategoria.equalsIgnoreCase(""))
                System.out.println("Nome da categoria deve ser não vazio.");
        }while(nomeCategoria.equalsIgnoreCase(""));
        Categoria c = fachada.buscaCategoria(nomeCategoria);
        if(r.getCategorias().contains(c))
            r.getCategorias().remove(c);
    }
    private void deletaReceita(Receita r)
    {
        fachada.removeReceita(r);
    }
    private void avaliaReceita()
    {
        Scanner in = new Scanner(System.in);
        float nota = 0;
        System.out.println("Insira a nota.(1-10)");
        nota = in.nextFloat();
        in.nextLine();
        fachada.avaliaNotaReceita(this.receita, nota);
        System.out.println("Avaliação realizada com sucesso.");
    }
    private void favoritaReceita()
    {
        fachada.getUsuarioLogado().getReceitasFavoritas().add(this.receita);
        System.out.println("Receita favoritada com sucesso.");
    }
}